package app;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;

import BD.BDDML;


import interfaces.iServer;
import internal.Produto;

public class Client { 
	
	//private static final String service = "rmi://localhost:9000/Server";
	private static final String service = "rmi://192.168.1.102:9000/Server";
	private static iServer server = null;
	private static BDDML banco = null;

	private static void startUP() throws MalformedURLException, RemoteException, NotBoundException, SQLException, ClassNotFoundException{
		if ( server == null )
			server = (iServer) Naming.lookup(Client.service);
		if ( banco == null )
			banco = new BDDML("Estoque");		
		return;
	}
	
	public static final void connect() throws MalformedURLException, RemoteException, NotBoundException, SQLException, ClassNotFoundException, InterruptedException{
		if ( server == null ) startUP();
		server.readUp();
		
		ArrayList<Produto> ret = server.connect();
		Iterator<Produto> it = ret.iterator();
		
		while ( it.hasNext() ){
			Produto p = (Produto) it.next();
			String cmd = "INSERT INTO Produtos (codigo, descricao,quantidade,preco) values ("+p.getCod()+",'"+p.getDescricao()+"', "+p.getQtdade()+","+p.getPreco()+")";
			System.out.println(cmd);
			banco.Executa(cmd);
		}
		
		server.readDown();
	}
	public static final void insertProduto(Produto p) throws MalformedURLException, RemoteException, NotBoundException, SQLException, ClassNotFoundException, InterruptedException{
		if ( server == null ) startUP();
		server.insertProduto(p);
	}
	public static final void deleteProduto(Produto p) throws MalformedURLException, RemoteException, NotBoundException, SQLException, ClassNotFoundException, InterruptedException{
		if ( server == null ) startUP();
		server.deleteProduto(p);
	}
	public static final void updateProduto(Produto p) throws MalformedURLException, RemoteException, NotBoundException, SQLException, ClassNotFoundException, InterruptedException{
		if ( server == null ) startUP();
		server.updateProduto(p);
	}
	public static ArrayList<Produto> getProdutos(String cmd) throws SQLException, MalformedURLException, RemoteException, NotBoundException, ClassNotFoundException, InterruptedException{
		if ( server == null ) startUP();
		if ( cmd == null ) cmd = "SELECT * FROM PRODUTOS";
		server.readUp();
		ResultSet rs = banco.Select(cmd);
		server.readDown();
		ArrayList<Produto> produtos = new ArrayList<Produto>();
		while(rs.next()){
			int cod = rs.getInt( "codigo" );
			System.out.print( "codigo = " + cod );

			String desc = rs.getString("descricao");
			System.out.print(" descricao = " + desc );

			int qtdade = rs.getInt("quantidade");
			System.out.print(" quantidade = " + qtdade );

			double preco = rs.getDouble("preco");
			System.out.println( " preco = " + preco );

			produtos.add(new Produto(cod,desc, qtdade, preco));
		}
		return produtos;
	}
	
	public static void destroyBDLocal(){
		
		try {
			banco.Executa("DELETE FROM Produtos");
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}
